package com.android.geotrack.artist;

import java.util.LinkedList;

import com.android.geotrack.R;
import com.android.geotrack.R.id;
import com.android.geotrack.R.layout;

import android.content.Context;
import android.graphics.drawable.Drawable;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.TextView;

public class ArtistAdapter extends BaseAdapter
{
	private LayoutInflater mInflater;
    private LinkedList<String> artists;
    private LinkedList<Drawable> thumbs;

    /**
     * Constructor
     * 
     * @param 	context
     */
    public ArtistAdapter(Context context, LinkedList<String> artists, LinkedList<Drawable> thumbs)
    {
        // Cache the LayoutInflate to avoid asking for a new one each time.
        mInflater = LayoutInflater.from(context);
        
        this.artists = artists;
        this.thumbs = thumbs;
    }

    /**
     * The number of items in the list.
     *
     * @see android.widget.ListAdapter#getCount()
     */
    public int getCount() {
        return artists.size();
    }

    /**
     * Since the data comes from a list, just returning the index is
     * sufficent to get at the data. If we were using a more complex data
     * structure, we would return whatever object represents one row in the
     * list.
     *
     * @see android.widget.ListAdapter#getItem(int)
     */
    public Object getItem(int position) {
        return position;
    }

    /**
     * Use the list index as a unique id.
     *
     * @see android.widget.ListAdapter#getItemId(int)
     */
    public long getItemId(int position) {
        return position;
    }

    /**
     * Make a view to hold each row.
     *
     * @see android.widget.ListAdapter#getView(int, android.view.View,
     *      android.view.ViewGroup)
     */
    public View getView(int position, View convertView, ViewGroup parent)
    {
        // A ViewHolder keeps references to children views to avoid unnecessary calls
        // to findViewById() on each row.
        ViewHolder holder;

        // When convertView is not null, we can reuse it directly, there is no need
        // to reinflate it. We only inflate a new View when the convertView supplied
        // by ListView is null.
        if (convertView == null) {
            convertView = mInflater.inflate(R.layout.artist_row, null);

            // Creates a ViewHolder and store references to the two children views
            // we want to bind data to.
            holder = new ViewHolder();
            holder.text = (TextView) convertView.findViewById(R.id.artistName);
            holder.icon = (ImageView) convertView.findViewById(R.id.artistThumb);

            convertView.setTag(holder);
        } else {
            // Get the ViewHolder back to get fast access to the TextView
            // and the ImageView.
            holder = (ViewHolder) convertView.getTag();
        }

        // Bind the data efficiently with the holder.
        holder.text.setText(artists.get(position));
        holder.icon.setImageDrawable(thumbs.get(position));

        return convertView;
    }

    static class ViewHolder {
        TextView text;
        ImageView icon;
    }
}